import axios,{type AxiosRequestConfig, type AxiosResponse} from "axios"; // 引入axios
import {getToken,getProjectId} from "../utils/handleCookie";
import  {message} from "antd";
// 创建axios实例
const service = axios.create({
    baseURL : '/api', // 基础url
    timeout : 100000    // 请求超时时间
})

// request interceptor 请求拦截器 
service.interceptors.request.use(
    (config) => {
        config.headers['Authorization'] ='Bearer' + getToken() || "" //设置请求头
        config.headers['X-Project-Id'] = getProjectId() || "" //设置请求头
        return config // 返回配置 不返回不可以使用
    },
    (error) =>{
        console.log(error)
        return Promise.reject(error) // 返回一个Promise对象 异步处理错误
    }
)

// response interceptor 响应拦截器
service.interceptors.response.use(
    (response:AxiosResponse) => { // 返回一个Promise对象
        return response // 返回数据
    },
    (error)=>{ 
        if(error.response.strtus === 401){
            message.error("登录过期，请重新登录") //提示错误信息

            window.dispatchEvent(new CustomEvent('unauthorized')) // 触发自定义事件
        }
        return error
    },
)
export interface ICommon<T>{ // 定义接口
    code:number  //状态码
    data:T //泛型
    msg:string //提示信息
}

export default <T>(config:AxiosRequestConfig)=>{ // 定义泛型
    return service(config).then((res):ICommon<T>=>{ // 返回一个Promise对象
        return res.data // 返回数据
    })
}